package com.atguigu.srb.core.controller.admin;


import com.atguigu.srb.base.asserts.Asserts;
import com.atguigu.srb.base.response.R;
import com.atguigu.srb.base.response.ResponseEnum;
import com.atguigu.srb.core.pojo.entity.Dict;
import com.atguigu.srb.core.service.DictService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * <p>
 * 数据字典 前端控制器
 * </p>
 *
 * @author Atguigu
 * @since 2023-05-26
 */
@RestController
@Api(tags = "数据字典管理模块")
//@CrossOrigin
@RequestMapping("/admin/core/dict")
public class AdminDictController {
    @Resource
    DictService dictService;
    @ApiOperation("新增某个数据字典的下一级数据字典")
    @PostMapping
    public R save(@RequestBody Dict dict){//dict必须携带parentId
        Asserts.assertNotNull(dict.getParentId(), ResponseEnum.PARAM_ERROR);
        //创建更新时间会自动填充吗？  保存的对象属性上配置了自动填充时机、调用的是mp的新增/更新对象的方法(不能是我们自己通过Wrapper对象构建sql)
        //                     自动填充类必须能够被当前项目的启动类扫描到注入到容器中
        dictService.save(dict);
        return R.ok().msg("新增成功");
    }
    @ApiOperation("根据id删除数据字典")
    @DeleteMapping("{id}")
    public R deleteById(@PathVariable("id")String id){
        dictService.deleteById(id);
        return R.ok();
    }


    @ApiOperation("根据父id查询数据字典")
    @GetMapping("dicts/{parentId}")
    public R getDictsByParentId(@PathVariable("parentId")String parentId){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        List<Dict> dicts = dictService.getDictsByParentId(parentId);

        return R.ok().data("items" , dicts);
    }


    @ApiOperation("导出数据字典")
    @GetMapping("export")
    public void export(HttpServletResponse response){
        //验证权限
       dictService.exportDicts(response);
    }

    @ApiOperation("导入数据字典")
    // delete put post: 浏览器只能发送get或者post方式的请求
    //HiddenHttpMethodFilter
    // springmvc支持前端提交post+_method方式的请求 并将请求方式后端转换为_method值对应的类型
    @PostMapping("import")
    public R importDicts(//@RequestParam("file")
                             MultipartFile excel){//前端提交的文件表单项名称必须为file
        dictService.importDicts(excel);
        return R.ok().msg("数据字典导入成功");
    }

}

